package lambdademo;

public class Test {
    /**
    函数式接口
    */
    //无返回值无参数
    @FunctionalInterface
    interface NoParameterNoReturn {
        void test();
    }
    //无返回值一个参数
    @FunctionalInterface
    interface OneParameterNoReturn {
        void test(int a);
    }
    //无返回值多个参数
    @FunctionalInterface
    interface MoreParameterNoReturn {
        void test(int a,int b);
    }
    //有返回值无参数
    @FunctionalInterface
    interface NoParameterReturn {
        int test();
    }
    //有返回值一个参数
    @FunctionalInterface
    interface OneParameterReturn {
        int test(int a);
    }
    //有返回值多参数
    @FunctionalInterface
    interface MoreParameterReturn {
        int test(int a,int b);
    }

    public static void main(String[] args) {
        NoParameterNoReturn noParameterNoReturn = new NoParameterNoReturn() {
            @Override
            public void test() {
                System.out.println("这是无参无返回值的函数式接口");
            }
        };
        noParameterNoReturn.test();
        //NoParameterNoReturn noParameterNoReturn1 = () -> {System.out.println("通过lambda表达式调用无参无返回值的函数式接口的方法");};
        NoParameterNoReturn noParameterNoReturn1 = () -> System.out.println("通过lambda表达式调用无参无返回值的函数式接口的方法");
        noParameterNoReturn1.test();

        //OneParameterNoReturn oneParameterNoReturn = (a) -> System.out.println("这是有一个参数无返回值的函数式接口的方法:" + a);
        //只有一个参数,()可以省略
        OneParameterNoReturn oneParameterNoReturn = a -> System.out.println("这是有一个参数无返回值的函数式接口的方法:" + a);
        oneParameterNoReturn.test(10);

        //MoreParameterNoReturn moreParameterNoReturn = (int a,int b) -> System.out.println("这是有多个参数无返回值的函数式接口的方法:"+(a+b));
        //相同类型的参数,如果要省略类型都省略
        MoreParameterNoReturn moreParameterNoReturn = (a,b) -> System.out.println("这是有多个参数无返回值的函数式接口的方法:"+(a+b));
        moreParameterNoReturn.test(10,15);

        //NoParameterReturn noParameterReturn = () -> {return 10;};
        //可以省略return
        NoParameterReturn noParameterReturn = () ->  10;
        System.out.println("无参有返回值:"+noParameterReturn.test());

        OneParameterReturn oneParameterReturn = (a) -> a;
        System.out.println("有一个参有返回值:"+oneParameterReturn.test(10));

        MoreParameterReturn moreParameterReturn = (a,b) -> a + b;
        System.out.println("有多个参有返回值:"+moreParameterReturn.test(2,3));
    }
}
